package net.suplementos.negocio;

import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;

import net.suplementos.dao.DespesaDAO;
import net.suplementos.dao.EstornoDAO;
import net.suplementos.dao.SuplementosDAOFactory;
import net.suplementos.dao.VendaDAO;
import net.suplementos.dominio.TipoRelatorioVendas;
import net.suplementos.exception.CampoObrigatorioException;
import net.suplementos.exception.DAOException;
import net.suplementos.exception.ErroInternoException;
import net.suplementos.pojo.Despesa;
import net.suplementos.pojo.Produto;
import net.suplementos.servico.GerencialServico;

@Stateless(name="/net/suplementos/facade/Gerencial")
@TransactionManagement(TransactionManagementType.CONTAINER)
public class GerencialBusiness implements GerencialServico {

	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public void relatorioVendas(Date dataInicio, Date dataFim, TipoRelatorioVendas tipo) 
			throws CampoObrigatorioException {
		try {
		    VendaDAO vendaDAO = SuplementosDAOFactory.getInstance().getVendaDAO();
		    EstornoDAO estornoDAO = SuplementosDAOFactory.getInstance().getEstornoDAO();

			vendaDAO.get(null);
			estornoDAO.get(null);
		} catch (DAOException e) {
			throw new ErroInternoException(e.getMessage(), e);
		}
	}

	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public void relatorioDespesas(Date dataInicio, Date dataFim) throws CampoObrigatorioException {
		try {
		    DespesaDAO despesaDAO = SuplementosDAOFactory.getInstance().getDespesaDAO();

			despesaDAO.get(1);
		} catch (DAOException e) {
			throw new ErroInternoException(e.getMessage(), e);
		}
	}
	
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public List<Produto> notificacoesProdutosVencendo() {
		return null;
	}
	
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public List<Produto> notificacoesProdutosPoucoEstoque() {
		return null;
	}
	
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public List<Despesa> notificacoesContasVencendo() {
		return null;
	}

	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public boolean existeNotificacoesProdutosVencendo() {
		return true;
	}
	
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public boolean existeNotificacoesProdutosPoucoEstoque() {
		return true;
	}
	
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public boolean existeNotificacoesContasVencendo() {
		return true;
	}
}
